home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyc (Python 2.5)
-
- import sys
- import cStringIO
- import select
- import socket
- from g import *
- from codes import *
-
- def buildResultMessage(msg_type, payload = None, result_code = ERROR_SUCCESS, other_fields = { }):
- other_fields.update({
- 'result-code': result_code })
- return buildMessage(msg_type, payload, other_fields)
-
-
- def buildMessage(msg_type, payload = None, other_fields = { }):
- if msg_type is None or not msg_type:
- raise Error(ERROR_INVALID_MSG_TYPE)
-
- msg = cStringIO.StringIO()
- msg.write('msg=%s\n' % msg_type.lower())
- if other_fields:
- for k in other_fields:
- msg.write('%s=%s\n' % (k, str(other_fields[k])))
-
-
- if payload is not None:
- msg.write('length=%d\n' % len(str(payload)))
- msg.write('data:\n%s' % str(payload))
-
- return msg.getvalue()
-
-
- def parseMessage(message):
- (fields, data_found, data, remaining_msg) = ({ }, False, '', '')
- msg_key_found = False
- second_msg_key = False
-
- try:
- msg = cStringIO.StringIO(message)
- except TypeError:
- raise Error(ERROR_INVALID_MSG_TYPE)
-
- while True:
- pos = msg.tell()
- line = msg.readline().strip()
- if line == '':
- break
-
- if line.startswith('data:'):
- if not msg.read(fields['length']):
- pass
- data = ''
- data_found = True
- continue
-
- if line.startswith('#'):
- continue
-
-
- try:
- (key, value) = line.split('=', 1)
- key = key.strip().lower()
- except ValueError:
- raise Error(ERROR_INVALID_MSG_TYPE)
-
- if key == 'msg':
- if msg_key_found:
- second_msg_key = True
- break
- else:
- msg_key_found = True
-
-
- try:
- fields[key] = int(value)
- continue
- except ValueError:
- fields[key] = value
- continue
-
-
- None<EXCEPTION MATCH>ValueError
- if second_msg_key:
- msg.seek(pos)
- if not msg.read():
- pass
- remaining_msg = ''
-
- return (fields, data, remaining_msg)
-
-
- def sendEvent(sock, msg_type, payload = None, other_fields = { }, timeout = prop.read_timeout):
- m = buildMessage(msg_type, payload, other_fields)
- log.debug('Sending data on channel (%d)' % sock.fileno())
- log.debug(repr(m))
- (r, w, e) = select.select([], [
- sock], [], timeout)
- if w == []:
- raise Error(ERROR_INTERNAL)
-
-
- try:
- sock.send(m)
- except socket.error:
- log.exception()
- raise Error(ERROR_INTERNAL)
-
-
-
- def xmitMessage(sock, msg_type, payload = None, other_fields = { }, timeout = prop.read_timeout):
- fields = { }
- data = ''
- result_code = ERROR_INTERNAL
- msg_type = msg_type.lower().strip()
- m = buildMessage(msg_type, payload, other_fields)
- log.debug('(xmit) Sending data on channel (%d)' % sock.fileno())
- log.debug(repr(m))
- (r, w, e) = select.select([], [
- sock], [], timeout)
- if w == []:
- raise Error(ERROR_INTERNAL)
-
-
- try:
- sock.send(m)
- except socket.error:
- log.exception()
- raise Error(ERROR_INTERNAL)
-
- read_tries = 0
- read_flag = True
- while read_flag:
- remaining = ''
- read_tries += 1
- if read_tries > 3:
- break
-
- (r, w, e) = select.select([
- sock], [], [], timeout)
- if r == []:
- raise Error(ERROR_INTERNAL)
-
- m = sock.recv(prop.max_message_read)
- if m == '':
- continue
-
- log.debug('(xmit) Reading data on channel (%d)' % sock.fileno())
- while True:
- log.debug(repr(m))
- (fields, data, remaining) = parseMessage(m)
-
- try:
- result_code = fields['result-code']
- except KeyError:
- result_code = ERROR_INTERNAL
-
- del fields['result-code']
-
- try:
- result_msg_type = fields['msg'].lower().strip()
- except KeyError:
- result_msg_type = ''
-
- del fields['msg']
- if result_msg_type == ''.join([
- msg_type,
- 'result']) or result_msg_type == 'messageerror':
- read_flag = False
- break
- else:
- log.debug('Ignored out of sequence message')
- if remaining:
- log.debug('Remaining message')
- m = remaining
- continue
- break
- return (fields, data, result_code)
-
-
- def recvMessage(sock, timeout = prop.read_timeout):
- fields = { }
- data = ''
- result_code = ERROR_INTERNAL
- read_tries = 0
- read_flag = True
- while read_flag:
- remaining = ''
- read_tries += 1
- if read_tries > 3:
- break
-
- (r, w, e) = select.select([
- sock], [], [], timeout)
- if r == []:
- continue
-
- m = sock.recv(prop.max_message_read)
- if m == '':
- continue
-
- log.debug('(xmit) Reading data on channel (%d)' % sock.fileno())
- while True:
- log.debug(repr(m))
- (fields, data, remaining) = parseMessage(m)
-
- try:
- result_code = fields['result-code']
- except KeyError:
- result_code = ERROR_INTERNAL
-
- del fields['result-code']
-
- try:
- result_msg_type = fields['msg'].lower().strip()
- except KeyError:
- result_msg_type = ''
-
- del fields['msg']
- if result_msg_type == 'messageerror':
- read_flag = False
- break
-
- if remaining:
- log.debug('Remaining message')
- m = remaining
- continue
- break
- return (fields, data, result_code)
-
-